// import { login, getUserInfo } from '@/api/modules/home';
import { getToken, setToken, removeToken } from '@/utils/auth';

const user = {
  state: {
    user: '',
    status: '',
    code: '',
    token: getToken() || '',
    name: '',
    avatar: '',
    introduction: '',
    roles: [],
    setting: {
      articlePlatform: [],
    },
  },

  mutations: {
    SET_CODE: (state, code) => {
      state.code = code;
    },
    SET_TOKEN: (state, token) => {
      state.token = token;
    },
    SET_INTRODUCTION: (state, introduction) => {
      state.introduction = introduction;
    },
    // SET_SETTING: (state, setting) => {
    //   state.setting = setting
    // },
    // SET_STATUS: (state, status) => {
    //   state.status = status
    // },
    SET_NAME: (state, name) => {
      state.name = name;
    },
    SET_AVATAR: (state, avatar) => {
      state.avatar = avatar;
    },
    SET_ROLES: (state, roles) => {
      state.roles = roles;
    },
  },
  actions: {
    // 用户名登录
    LoginByUsername({ commit, dispatch }, userInfo) {
      const username = userInfo.phone.trim();
      return new Promise((resolve, reject) => {
        // login(userInfo).then(responses => {
        let response = {
          token: '123141sr',
          data: {
            name: '超级管理员',
            avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
            roles: ['admin'],
          },
        };

        commit('SET_TOKEN', response.token);
        setToken(response.token);
        if (response.data.roles && response.data.roles.length > 0) {
          // 验证返回的roles是否是一个非空数组
          // commit('SET_ROLES', response.data.roles)
          dispatch('GenerateRoutes', response.data);
        } else {
          reject('getInfo: roles must be a non-null array!');
        }
        commit('SET_NAME', response.data.name);
        commit('SET_AVATAR', response.data.avatar);
        // commit('SET_INTRODUCTION', response.data.introduction)
        resolve();
        // }).catch(error => {
        //   reject(error)
        // })
      });
    },
    // // 获取用户信息
    GetUserInfo({ commit, state }) {
      return new Promise((resolve, reject) => {
        // getUserInfo({}).then(response => {
        // 由于mockjs 不支持自定义状态码只能这样hack
        // if (!response.data) {
        //   reject('Verification failed, please login again.')
        // }
        let response = {
          list: {
            name: '超级管理员',
            avatar: 'https://img.yzcdn.cn/vant/cat.jpeg',
            roles: ['admin'],
          },
        };
        const data = response.list;

        if (data.roles && data.roles.length > 0) {
          // 验证返回的roles是否是一个非空数组
          commit('SET_ROLES', data.roles);
        } else {
          reject('getInfo: roles must be a non-null array!');
        }
        commit('SET_NAME', data.name);
        commit('SET_AVATAR', data.avatar);
        // commit('SET_INTRODUCTION', data.introduction)
        resolve(response);
        // }).catch(error => {
        //   console.log(error);
        //   reject(error)
        // })
      });
    },
    // 登出
    LogOut({ commit, state }) {
      return new Promise((resolve, reject) => {
        // logout(state.token).then(() => {
        commit('SET_TOKEN', '');
        commit('SET_ROLES', []);
        removeToken();
        resolve();
        // }).catch(error => {
        //   reject(error)
        // })
      });
    },
    // 前端 登出
    FedLogOut({ commit }) {
      return new Promise(resolve => {
        commit('SET_TOKEN', '');
        removeToken();
        resolve();
      });
    },

    // 动态修改权限(没用)
    ChangeRoles({ commit, dispatch }, role) {
      return new Promise(resolve => {
        // commit('SET_TOKEN', role)
        // setToken(role)
        getUserInfo({}).then(response => {
          const data = response.list;
          commit('SET_ROLES', data.roles);
          commit('SET_NAME', data.name);
          commit('SET_AVATAR', data.avatar);
          commit('SET_INTRODUCTION', data.introduction);
          dispatch('GenerateRoutes', data); // 动态修改权限后 重绘侧边菜单
          resolve();
        });
      });
    },
  },
};

export default user;
